\documentclass[a4paper]{article}

%%%%% Paquetes

\usepackage[spanish]{babel} 
\usepackage[utf8]{inputenc}
\usepackage{makeidx} %Indice
\usepackage{amsmath} %Ecuaciones sin numero al costado
\usepackage{graphicx} %Imagenes
\usepackage{fancyhdr} %Para encabezado y pie de pagina
\usepackage{float}
\usepackage[top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry} 
\usepackage[hidelinks]{hyperref} %Para url y links
\hypersetup{colorlinks=false}

\usepackage{longtable} %Para tablas que ocupan mas de una hoja

% Para las notas al pie dentro de tablas o tabulaciones
\usepackage{tablefootnote}

%%%%% Paquetes

\begin{document}

\pagenumbering{gobble} %No numerar la primer pagina

\begin{titlepage}
	\centering
	\includegraphics{images/logo_fiuba.png}\par\vspace{1cm}
	{\scshape\LARGE Facultad de Ingeniería \par
	Universidad de Buenos Aires  \par}
	\vspace{1.5cm}
	{\Large\bfseries Propuesta de Trabajo Profesional\par}
	\vspace{0.5cm}
	{\huge\bfseries Sistema de Recomendación para Fantasy Football Basado en Deep Learning \par}
	\vspace{6.5cm}
	\begin{flushleft}
	\Large\itshape{Bruno Liberini - 90899}\\
	\vspace{0.5cm}
	\Large{Tutor: XXXX} \par
	\end{flushleft}
	\vfill
% Bottom of the page
	{\large Septiembre, 2019 \par}
\end{titlepage}

  \newpage
  
  \pagenumbering{arabic} %Comenzar a numerar las paginas

  \tableofcontents % Indice
    
%%%% Cabecera y pie de pagina
  \pagestyle{fancy}
  \lhead{Bruno Liberini - Padrón 90899}
  \rhead{}
  \renewcommand{\headrulewidth}{0.4pt} % grosor de la línea de la cabecera
%%%% Cabecera y pie de pagina

  \newpage
  
  \section{Introducción}
  
  El siguiente documento presenta la propuesta del Trabajo Profesional de Ingeniería en Informática del alumno Bruno Liberini, padrón 90899. El docente que estará a cargo como tutor del trabajo profesional será XXXX. \newline
  
  El tema elegido para el trabajo profesional es \textit{“Sistema de Recomendación para Fantasy Football Basado en Deep Learning”}. \newline
  
  El objetivo del trabajo es aplicar los conocimientos adquiridos durante la carrera a fin de construir un sistema que prediga el puntaje que alcanzarán los jugadores de fútbol americano cada fecha con una precisión mejor a la de los expertos de \textit{fantasy football}, y generar un algoritmo de optimización que le permita a un jugador de \textit{daily fantasy football} elegir el mejor equipo posible en la mayoría de los casos.  \newline
  
  Como objetivo secundario, se propone  estudiar distintos algoritmos de \textit{machine learning}, en especial los algoritmos de \textit{deep learning} con el fin de generar el modelo para predecir el puntaje de los jugadores semana a semana, estudiar algoritmos de optimización con el fin de obtener el mejor equipo en relación a los puntos conseguidos vs. su costo y experimentar con tecnologías cloud y web para poder implementar una interfaz web para el sistema que le permita a los usuarios interactuar con él.\newline
  
  \subsection{Motivación}
  
  Los \textit{fantasy sports} ("deportes de fantasía", en español) son juegos donde los jugadores arman equipos de distintos deportes de manera virtual, basados en jugadores reales, y en base a su actuación en cada fecha de sus respectivas ligas y competencias obtienen una puntuación que establece su posición en un ranking. El \textit{fantasy football} ("fútbol americano de fantasía") es uno de estos juegos. Los jugadores eligen jugadores de fútbol americano para completar un equipo de 7 posiciones y, basados en el desempeño de los jugadores reales en los partidos reales, consiguen un puntaje total con el cual deben superar al puntaje total obtenido por el equipo del jugador contra el cual compiten. \newline
  
  El \textit{fantasy football} es un juego muy popular en los Estados Unidos y Canadá. Según estimaciones de la \textit{Fantasy Sports Trade Association}\footnote{\textit{Industry Demographics (2017)}, Fantasy Sports Trade Association. Recuperado el 1º de Septiembre de 2019 de: \url{https://thefsga.org/industry-demographics/}} cerca de 60 millones de personas juegan \textit{fantasy football} todas las semanas. Gracias a este interés del público por el juego, este se ha convertido en una industria que mueve más de USD 7 mil millones\footnote{Wilson, R. (2018, Octubre 20). \textit{Fantasy football, the \$7 billion industry}. FOX Business. Recuperado el 1º de Septiembre de 2019 de: \url{https://www.foxbusiness.com/economy/fantasy-football-the-billion-industry}} todos los años a través de ligas pagas, apuestas y servicios derivados, con el jugador promedio gastando USD 556 en costos relacionados a la liga donde participa. Los mismos jugadores pueden obtener ganancias de hasta USD 1 millón en plataformas como DraftKings, FanDuel, Yahoo!, ESPN y NFL.com. FanDuel\footnote{\url{https://www.fanduel.com/}}, incluso, permite ganar una suma de dinero independientemente del desempeño de los otros jugadores, sólamente superando un mínimo puntaje que se establece cada fecha (a cambio de una subscripción anual).\newline
  
  Hay dos subtipos de juego: el tradicional, donde los usuarios eligen a los jugadores al comienzo de la temporada y los mantienen hasta que se termine, y las \textit{daily fantasy leagues}, donde todas las fechas se realiza una selección de jugadores (cada uno asociado a un "precio") donde cada usuario arma su equipo atado a un presupuesto límite igual para todos. En general, los equipos están formados por un mariscal de campo (QB), dos o tres corredores (RB), dos o tres alas abiertas (WR), un ala cerrada (TE), un pateador (K) y un equipo defensivo/cuadros especiales (DEF/DST). Además, deben elegir hasta 6 reemplazos, que pueden ser de cualquier posición, pero los jugadores cuyo puntaje se contará para cada fecha son los que aparecen en el equipo titular de 7 posiciones. \newline
  
  Para poder elegir el mejor equipo, los usuarios normalmente se basan en las proyecciones de cada jugador para cada fecha (o para la temporada, en el caso del tipo tradicional) brindadas por distintos servicios. Las plataformas de \textit{fantasy football} usualmente proveen proyecciones para cada fecha y artículos especializados donde expertos recomiendan qué jugador poner de titular y cuáles jugadores sacar, qué jugadores tienen los enfrentamientos más favorables y cuáles están "de racha". Incluso existen servicios pagos como el de RotoWorld\footnote{\url{https://www.rotoworld.com/sports/nfl/football}} o contenido premium de ESPN que dicen ofrecer datos de mayor precisión sobre cuál será el desempeño de los jugadores más destacados cada fecha. \newline
  
  Existe entonces un interés económico real en obtener un sistema que haga predicciones más precisas sobre el desempeño de los jugadores cada fecha. La asimetría de información permite obtener una ventaja a la hora de competir contra los otros jugadores y ganar los premios de cada liga. Quienes hacen uso de análisis estadísticos más minusciosos han podido lograr ganancias millonarias en distintas ligas de fantasías\footnote{Marsha, K. (2015, Noviembre 5). \textit{Colorado fantasy sports millionaire says winning is skill he had to learn}. KDVR.com. Recuperado el 1º de Septiembre de 2019 de: \url{https://kdvr.com/2015/11/04/colorado-fantasy-sports-millionaire-says-winning-is-skill-he-had-to-learn/}}. Combinando modelos de machine learning y algoritmos de optimización, se espera obtener un sistema que ofrezca esta ventaja competitiva a fin de a) lograr ganar una ganancia neta compitiendo en distintas competencias \textit{daily fantasy football} o b) vendiendo el servicio de recomendación a terceros.
  
  \subsection{Justificación}
  
  \begin{enumerate}
  	\item Se elige \textit{fantasy football} por sobre otras ligas de fantasía (por ejemplo, el fútbol asociado) porque  cuentan con un equilibrio entre cantidad de estadísticas y datos relacionados a la performance de los jugadores y el tamaño de la industria del juego. El béisbol cuenta con un conjunto de datos estadísticos más completo y minuscioso, pero el tamaño de la industria es muy chico, al mismo tiempo que cuenta con mayor competencia en cuanto a modelos predictivos (el béisbol es uno de los deportes donde el análisis estadístico está más desarrollado). El fútbol asociado es más popular mundialmente, pero no cuenta con ligas de fantasía tan grandes como las de fútbol americano y el análisis estadístico no es tan popular como en este deporte.
  	\item Se elige explotar el problema en el contexto de las competencias de \textit{daily fantasy football} porque el trabajo de predicción es más sencillo. Predecir el rendimiento de un jugador por toda una temporada está sujeto a una mayor cantidad de eventos aleatorios (lesiones propias, lesiones de compañeros, cambios en el cuerpo técnico) que pueden incrementar abruptamente el error. En cambio, la predicción semana a semana acota esta aleatoriedad, sujeta al desarrollo de los eventos durante sólo una semana. 
  	\item Se elige el sistema de puntuación PPR (\textit{points per reception}, "puntos por recepción") porque es el sistema más popular hoy por hoy y nos brinda mayor caudal de datos para nuestro conjunto de datos.
  	\item En las competencias de \textit{daily fantasy football} tampoco se tiene que tener en cuenta las semanas de descanso de cada equipo (una por cada equipo repartidas desde la semana 4 a la 12) para coordinar la elección de los substitutos, lo que vuelve más sencillo al algoritmo de optimización que hará la elección de jugadores.
  \end{enumerate}

  \subsection{Innovaciones}
  
  Este trabajo presenta las siguientes innovaciones respecto de la bibliografía consultada:
  
  \begin{itemize}
  	\item A diferencia de la bibliografía, que utiliza modelos de regresión lineales para predecir la performance de los jugadores, el trabajo explorará modelos de \textit{deep learning} como las redes neuronales recurrentes para este mismo objetivo.
  	\item Todos los trabajos consultados hicieron uso de estadísticas convencionales para predecir la performance de los jugadores. Este trabajo también considerará el uso de estadísticas avanzadas de fútbol americano para intentar descubrir features relevantes.
  	\item Se utiliza la oportunidad para explorar estrategias de mejora de servicios de alta demanda en el marco de una aplicación web que recomienda la mejor formación posible para una fecha de \textit{daily fantasy football}.
  \end{itemize}
   
  \newpage
  \section{Descripción del Problema}
  
  El problema que se propone resolver se dividirá en 4 partes:
  
  \begin{enumerate}
	\item Obtención de datos: acceso a APIs o construcción de web scrappers
	\item Exploración de datos
	\item Construcción de modelos de machine learning para predicción de performance
	\item Construcción de algoritmo de optimización para selección de jugadores
  \end{enumerate} 

  \subsection{Obtención de datos}
  
  Uno de los principales desafíos en cualquier proceso de \textit{business intelligence} es la obtención y normalización de datos útiles para el desarrollo. Tanto en cantidad como en calidad de datos, gran parte del éxito del sistema se basará en tener información que realmente sirva para predecir el el rendimiento futuro de los jugadores.\newline
  
  \subsubsection{Estadísticas principales}
  
  Los datos más importantes para el problema son las estadísticas que acarrean puntos en el juego. Estas son:
  
  \begin{table}[htbp]
  	 \begin{center}
	  	\begin{tabular}{|l|c|}
	  		\hline
	  		\textbf{Categoría}                                                                               & \multicolumn{1}{l|}{\textbf{Puntos}}                                                                                                     \\ \hline
	  		\textit{Yardas acarreadas}                                                                       & 0,1                                                                                                                                      \\ \hline
	  		\textit{Touchdowns por tierra}                                                                   & 6                                                                                                                                        \\ \hline
	  		\textit{Recepciones}                                                                             & 0,5                                                                                                                                      \\ \hline
	  		\textit{Yardas recibidas}                                                                        & 0,1                                                                                                                                      \\ \hline
	  		\textit{Touchdowns por recepción}                                                                & 6                                                                                                                                        \\ \hline
	  		\textit{Yardas por pase}                                                                         & 0.04                                                                                                                                     \\ \hline
	  		\textit{Touchdowns por pase}                                                                     & 4                                                                                                                                        \\ \hline
	  		\textit{Intercepciones lanzadas}                                                                 & -2                                                                                                                                       \\ \hline
	  		\textit{Balones sueltos perdidos}                                                                & -2                                                                                                                                       \\ \hline
	  		\textit{Jugadas de 2 puntos}                                                                     & 2                                                                                                                                        \\ \hline
	  		\textit{\begin{tabular}[c]{@{}l@{}}Touchdowns defensivos\\ o de equipos especiales\end{tabular}} & 6                                                                                                                                        \\ \hline
	  		\textit{Capturas de mariscal}                                                                    & 1                                                                                                                                        \\ \hline
	  		\textit{Intercepciones atrapadas}                                                                & 2                                                                                                                                        \\ \hline
	  		\textit{\begin{tabular}[c]{@{}l@{}}Balones sueltos recuperados\\ a la defensiva\end{tabular}}    & 2                                                                                                                                        \\ \hline
	  		\textit{Safeties}                                                                                & 2                                                                                                                                        \\ \hline
	  		\textit{Puntos permitidos}                                                                       & \begin{tabular}[c]{@{}c@{}}0 pts: 10\\ 1-6 pts: 7\\ 7-13 pts: 4\\ 14-20 pts: 1\\ 21-27 pts: 0\\ 28-34 pts: -1\\ 35+ pts: -4\end{tabular} \\ \hline
	  		\textit{Puntos extra}                                                                            & 1                                                                                                                                        \\ \hline
	  		\textit{Goles de campo}                                                                          & \begin{tabular}[c]{@{}c@{}}0-19 yardas: 1\\ 20-49 yardas: 3\\ 50+ yardas: 5\end{tabular}                                                 \\ \hline
	  	\end{tabular}
  	\end{center}
  \end{table}
  
  La mayoría de las investigaciones estudiadas utilizan a lo sumo un subconjunto de estos datos. Otras estadísticas tradicionales que pueden considerarse son acarreos, jugadas totales donde estuvo involucrado el jugador, partidos jugados, partidos iniciados, partidos perdidos por lesión, diferenciar entre partidos jugados de local y de visitante. \newline
  
  En este caso, existen varias servicios que ofrecen estadísticas sobre los jugadores y los equipos durante la temporada entre los que se encuentran:
  
  \begin{itemize}
  	\item \textit{NFL.com} es la página oficial de la NFL. Aunque no ofrece una API para obtener estadísticas de los jugadores, es posible encontrar las estadísticas anteriores usando un web scrapper. Tiene todos los datos históricos de todos los jugadores que jugaron en la liga.
  	\item \textit{Pro Football Reference}\footnote{\url{https://www.pro-football-reference.com}}. Página que recopila estadísticas de la NFL. Al igual que NFL.com, cuenta con todos los datos oficiales históricos de los jugadores. A diferencia de este ofrece un servicio llamado \textit{Play Index} que permite buscar partidos, jugadores o equipos según distintos criterios. Tampoco ofrece una API, pero el \textit{Play Index} puede manipularse por query string.
  	\item \textit{ESPN}\footnote{\url{https://www.espn.com}}. Conglomerado de medios especializado en deportes. También recopila estadísticas de fútbol americano, aunque tampoco ofrece una API para ellos.
  \end{itemize}

  \subsubsection{Estadísticas avanzadas}

  Uno de los valores agregados que se quiere incluir en el trabajo es el uso de estadísticas avanzadas. A diferencia de las estadísticas tradicionales, las estadísticas avanzadas buscan cuantificar el valor de cada jugada respecto a la situación del partido, el oponente y el rendimiento esperado del equipo. En deportes más acostumbrados al uso de estadísticas para medir la performance, como el béisbol (donde el estudio empírico de estadísticas se conoce como \textit{sabermetrics}), ha llevado a la adopción de estrategias gerenciales basadas en ella que permiten a los equipos detectar talentos "escondidos" y la adopción estrategias de juego basados en el estudio empírico de datos que les proveen una ventaja sobre el rival \cite{MONEYBALL}.
  
  En el caso del fútbol americano, aunque el estudio de estadísticas avanzadas no es tan prominente como en el béisbol, existen algunas fuentes independientes que las ofrecen como servicio. \textit{Football Outsiders}\footnote{\url{https://www.footballoutsiders.com}} es el más conocido. Su métrica más famosa es DVOA (\textit{Defense-adjusted Value Over Average}, "valor sobre el promedio ajustado por defensiva") que busca medir el impacto de cada jugada, jugador y equipo por sobre el promedio ajustándolo a la calidad de la defensiva que enfrenta. A través de ella se pueden conseguir datos interesantes para la predicción del desempeño de un jugador, como pueden ser:
  
  \begin{itemize}
  	\item \textbf{DVOA}.
  	\item \textbf{DYAR} (\textit{Defense-adjusted Yards Above Replacement}, 'yardas sobre reemplazo ajustadas por defensiva'), que mide el valor acumulado de un jugador respecto de lo que produciría un reemplazo promedio si jugara en las situaciones que jugó él.
  	\item \textbf{Adjusted Line Yards} ('yardas ajustadas por línea'), que busca diferenciar la contribución a las yardas acarreadas por un jugador entre el desempeño de quien acarrea y el desempeño de la línea ofensiva. 
  	\item \textbf{Adjusted Sack Rate} ('tasa de sacks ajustada'), que representa la tasa de sacks que una defensa provoca (o que una ofensiva sufre) respecto de la cantidad de situaciones de pase a las que se enfrente.
  \end{itemize}
  
  Aunque Football Outsiders no cuente con una API abierta para consultar estos datos, sí los publica en su página todas las semanas, por lo que se puede construir un web-scrapper para obtenerlos y parsearlos de ser necesario.
  
  \subsection{Exploración de datos}
  
  Este paso incluye tanto la normalización y limpieza de datos como su exploración para obtener nuevas características útiles para los modelos de \textit{machine learning} que se van a aplicar. \\
  
  La normalización y limpieza de datos se enfocará en unificar las fuentes de datos para jugadores llenando las características no encontradas de cada uno según una heurística a determinar. El descubrimiento de nuevas características se hará mediante la manipulación y combinación de los datos en crudo que se obtuvieron, probarlos contra los modelos a usar, mejorarlos de ser necesario y añadirlos o descartarlos al conjunto de datos según corresponda. Este paso se llama \textit{ingeniería de características}. \\
  
  La ingeniería de características es considerada uno de los pasos fundamentales en la aplicación práctica de \textit{machine learning}. El éxito o fracaso de los modelos puede depender de las características que se utilizaron más que de la arquitectura de los modelos en sí \cite{FEATURE_ENG_DOM}.  
  
  \subsection{Construcción de modelos de machine learning para predicción}
  
  El objetivo del trabajo es utilizar modelos de \textit{deep learning} para encontrar el modelo que mejor pueda predecir la performance de los jugadores estudiados. Sin embargo en primer lugar se construirá un benchmark utilizando técnicas de estadística y machine learning más sencillas. \\
  
  Entre las técnicas utilizadas para predecir la performance de los jugadores de fútbol americano en la bibliografía consultada se encuentran la regresión lineal \cite{ML_DFS, RANDOM_FOR}, no-lineal \cite{RANDOM_FOR} y múltiple \cite{MULTIPLE}, regresión Bayesiana \cite{BAYESIAN}, regresión por máquinas de vectores de soporte \cite{LUTZ}, redes neuronales de tipo perceptrón multicapa \cite{LUTZ} y random forest \cite{RANDOM_FOR}.\\
  
  Por otro lado, se espera que los mejores resultados se encuentren utilizando modelos de \textit{deep learning} \cite{DEEP_LEARNING}. Los modelos de \textit{deep learning} utilizan múltiples capas para extraer progresivamente variables de más alto nivel del set de datos en crudo. En particular, entre estos tipos de modelos se encuentran las \textbf{\textit{redes neuronales de aprendizaje profundo}}. (\textbf{RNN} por sus siglas en inglés, \textit{recurrent neural networks}). Se han utilizado este tipo de redes neuronales para predecir la performance de jugadores en otros deportes como el béisbol \cite{RNN_BASEBALL}. Se espera que este tipo de modelo pueda presentar resultados similares para fútbol americano. \\
  
  La propuesta de este trabajo es estudiar algunos de estos modelos como modelos base y compararlos con el resultado utilizando modelos de \textit{deep learning}. Luego utilizar el modelo que mejor resultados dé, a menos que alguno de ellos presente mejores resultados para algún subconjunto del problema (por ejemplo, para predecir la performance de alguna de las posiciones, pero no todas), en cuyo caso se estudiará la posibilidad de utilizar más de un modelo al mismo tiempo.
  
  \subsection{Construcción de algoritmo de optimización para selección}
  
  El segundo paso es utilizar las predicciones del modelo para realizar la selección de jugadores. En un juego de \textit{daily fantasy football} los usuarios tienen un presupuesto con el cual tienen que elegir un equipo de 7 jugadores para la fecha. Todos los usuarios tienen el mismo presupuesto. Cada jugador tiene una cotización determinada por la plataforma que en general está basada en la expectativa de puntos anotados para esa semana. \\
  
  El problema de optimización a resolver es entonces:
  
  \begin{align*}
  		maximizar\qquad & f^Tx \\
  		sujeto\ a\qquad   & x_i \in \{0,1\},\ i = 1,...,m  \\
		  						   & Ax = b \\
		  						   & G^Tx \le h
  \end{align*}
  
  donde:
  
  \begin{itemize}
  	\item $x$ es un vector de $m$ posiciones ($m$ el número de jugadores en la liga) que tiene un 1 si el jugador es elegido y un 0 si no
  	\item $f_i$ contiene el puntaje predicho para el jugador $i$
  	\item $A_{ij}$ indica si el jugador $i$ juega en la posición $j$
  	\item $b_j$ contiene la cantidad de jugadores que se necesitan elegir para la posición $j$
  	\item $G_i$ es el costo del jugador $i$
  	\item $h$ es el presupuesto del usuario 
  \end{itemize}
  
  Nótese que el problema a resolver es similar al problema de optimización de portfolios de Markowitz, si asumimos que la performance de un jugador es un valor aleatorio con distribución normal (por ende, una esperanza y un desvío estándar, asociado al error/riesgo) \cite{MARKOWITZ}. \\
  
  Diversos trabajos han intentado resolver este problema con programación lineal entera \cite{RANDOM_FOR, PLE_FF, PROB_PLE_DFS} o algoritmos greedy \cite{GREEDY_FF}. Se construirán y estudiarán estos tipos de algoritmos, y se determinará cuál de ellos consigue los mejores resultados (entendido como el mejor desempeño en puntaje de los equipos de \textit{daily fantasy football} elegidos cada fecha) para aplicarlo en nuestra plataforma. 
 
  \section{Alcance}
  
  El alcance del trabajo contempla los siguientes puntos.
  
  \subsection{Módulo de recolección de datos}
  
  Exploración de posibles fuentes de datos y recolección de las fuentes selectas. Desarrollo de \textit{webscrapers} de ser necesarios.
  
  \begin{itemize}
  	\item Estadísticas clásicas de jugadores de la NFL
  	\item Estadísticas avanzadas de jugadores de la NFL
  	\item Cotización de \textit{daily fantasy football} de jugadores de la NFL
  	\item Proyecciones históricas de \textit{fantasy football} de jugadores de la NFL
  	\item Normalización de datos
  \end{itemize}
  
  No se espera que este módulo tenga interfaz de usuario, si no que su ejecución sea manual a través de ejecuciones de scripts que descarguen la información y luego la normalicen. A fin de ajustar las distintas etapas, se trabajará con cada una en forma individual primero para estudiar las mejores alternativas a la resolución de estos problemas para luego integrarlas con las demás dentro de un pipeline que las conecte secuencialmente y puedan correrse mediante la ejecución de un único script. \\
  
  El resultado final será una base de datos normalizada que servirá de fuente para los modelos a entrenar. \\
  
  Se han identificado las siguientes fuentes de datos. Aunque esta lista los detalla y menciona cuáles datos se van a consultar de cada fuente, no es exhaustiva y no se descarta utilizar otras fuentes en caso de que un análisis más profundo determine que no están completos:
  
  \begin{itemize}
  	\item \textit{NFL.com}
  	\item \textit{Pro Football Reference}
  	\item \textit{Football Outsiders}
  	\item \textit{FFToday}\footnote{\url{https://fftoday.com/index.html}}. Provee projecciones históricas de puntos de \textit{fantasy football}.
  	\item \textit{RotoGuru}\footnote{\url{http://rotoguru.net/}}. Provee salarios históricos para jugadores de \textit{fantasy football} en FanDuel.
  	\item \textit{FantasyData}\footnote{\url{https://fantasydata.com}}. Provee projecciones históricas de puntos de \textit{fantasy football} según distintos proveedores.
  \end{itemize}

  \subsection{Ingeniería de características}
  
  Se explorarán distintas combinaciones de características para obtener nuevos datos que sean relevantes para los modelos propuestos. También se eliminarán aquellas características que no aporten información a los modelos, a fin de mantener el conjunto de datos en un tamaño manejable para el hardware que se tiene a disposición.\\
  
  Al final de este paso se presentará un informe con los datos finales, a fin de justificar la inclusión o exclusión de características al conjunto de datos.
  
  \subsection{Desarrollo de los modelos y análisis de resultados}
  
  El desarrollo de modelos contemplará los siguientes pasos
  
  \begin{itemize}
  	\item Diseño de arquitecturas de los modelos
  	\item Entrenamiento de los modelos
  	\item Validación de los modelos
  	\item Comparación de las métricas obtenidas para cada modelo
  \end{itemize}
  
  Se dividen los modelos en dos: modelos de \textit{benchmark}, que servirá para comparar los modelos de \textit{deep learning} con los modelos estadísticos y de inteligencia artificial comúnmente utilizados hoy; y modelos de redes neuronales recurrentes.\\
  
  Por cada modelo se evaluará el error cuadrático medio de sus predicciones diarias para las distintas arquitecturas propuestas, se comparará con los otros (en especial los modelos de \textit{deep learning} con los modelos de benchmark) y se presentará un informe con las conclusiones sobre la arquitectura final de cada uno y su viabilidad para ser utilizado para predecir la performance de los jugadores del conjunto de datos. \\
  
  Finalmente se evaluará si las proyecciones de los modelos mejoran las proyecciones de los expertos. En este caso se compararán con las proyecciones de expertos encontradas en la etapa de recolección de datos.
  
  \subsection{Desarrollo de algoritmo de optimización}
  
  En primer lugar se debe desarrollar un algoritmo que, considerando los puntos anotados por los jugadores y sus salarios en cada fecha, elija un equipo óptimo que anote la mayor cantidad de puntos sujeto al presupuesto del usuario. Para la etapa de desarrollo se utilizarán datos reales de puntos anotados por cada jugador y el formato de selección de FanDuel: 1 QB, 2 RB, 3 WR, 1 TE, 1 K, 1 DST, 1 FLEX (WR, TE o RB). \\
  
  Se considerarán dos tipos de algoritmo: algoritmos de programación lineal entera y algoritmos de tipo greedy. Se comparará el resultado obtenido por cada uno dado los datos de performance y salario real de cada jugador y se decidirá cual alternativa es más conveniente utilizar, o si es posible utilizar una combinación de ambas.\\
  
  El algoritmo, una vez elegido, debe poder recibir como parámetros:
  
  \begin{itemize}
  	\item Listado de jugadores, con las proyecciones de puntos anotados
  	\item Cantidad de jugadores por posición
  	\item Salario máximo
  \end{itemize}

  Y luego devolver el listado de jugadores a elegir.
  
  \subsection{Creación de API de selección de equipos}
  
  Una vez obtenido el modelo y algoritmo de optimización, se deben exponer a través de una API para que los usuarios puedan hacer consultas en diversos puntos de tiempo, para distintas fechas, plataformas y límites de presupuesto.  \\
  
  \begin{enumerate}
  	\item El endpoint para elección de equipos debe poder recibir por parámetro:
  	
  	\begin{itemize}
  		\item Plataforma donde jugar, que determina la cantidad de jugadores por posición y su salario.
  		\item Salario límite
  		\item Fecha (sólo a fines ilustrativos, ya que en "productivo" la fecha siempre será la siguiente a jugar), que junto a la plataforma determina los salarios.
  	\end{itemize}
  	
  	Y devolver el listado de jugadores a elegir. Este es el endpoint principal de la API.
  	
  	\item El endpoint para la proyección de puntos, que puede recibir como parámetro opcional la posición del jugador.
  \end{enumerate}
  
  Para poder satisfacer la demanda en escenarios de alta carga, se planea desplegar los servicios en la nube en un auto-scaling group de Amazon. 
  
  \subsection{Creación de cliente web}
  
  Para poder interactuar con el modelo, el algoritmo y la API se tendrá un cliente web. Como el objetivo principal del trabajo es desarrollar el modelo y el algoritmo de optimización, el cliente web servirá de visualización de ellos y será lo más \textit{lean} posible.\\
  
  El usuario podrá acceder a las siguientes secciones:
  
  \begin{itemize}
  	\item \textbf{Pantalla principal}: landing page que informará sobre la plataforma y las opciones que tiene
  	\item \textbf{Pantalla de proyecciones}: mostrará un listado de jugadores con sus proyecciones para la siguiente fecha disponible, y la opción de cambiar de fecha a una pasada para visualizar cómo se compara la proyección con el puntaje real obtenido, o filtrar por posición de jugador. Esta fecha estará limitada al conjunto de prueba del modelo. También se podrá comparar el error obtenido respecto de las proyecciones de expertos de otras plataformas
  	\item \textbf{Pantalla de selección óptima}: mostrará un conjunto de filtros al usuario, entre ellos plataforma, salario límite y fecha. Al ingresarlos, la aplicación procesará el pedido consultando la API y devolverá el listado de jugadores con puntaje óptimo dados los filtros aplicados. 
  \end{itemize}

  Aunque el diseño del sitio no es de interés principal para este trabajo, se espera que su diseño cumpla con las heurísticas de usabilidad de Nielsen \cite{NIELSEN} para garantizar la calidad de su UX.
  
  \newpage
  
  \section{Tecnologías y herramientas}
  
  \subsection{Librerías principales de machine learning: Keras y TensorFlow}
  
  TensorFlow es una librería escrita en Python y C++ por el equipo Google Brain de Google, Inc., lanzada al público en 2015. Permite trabajar en los paradigmas de programación de flujo de datos y programación diferenciable, y se ha convertido en una de las principales librerías para programación de aplicaciones de machine learning. Su nombre deriva de que representa los datos en forma de \textit{tensores}. Su capacidad de correr en múltiples CPUs, GPUs o TPUs, su arquitectura flexible y su forma de trabajo a partir de grafos de flujo de datos la hacen atractiva para trabajar con problemas de machine learning. Es por esto que es una de las librerías más populares en la industria\footnote{Hale, J. ''Deep Learning Framework Power Scores 2018'' (2018, 19 de Septiembre). \textit{Towards Data Science}. Recuperado el 1 de Julio de 2019 de: \url{https://towardsdatascience.com/deep-learning-framework-power-scores-2018-23607ddf297a}}.
  
  Una de las desventajas de usar TensorFlow es que programar los \textit{dataflows} puede ser engorroso. Como no es nuestro objetivo aprender sobre el paradigma de programación de flujo de datos y queremos reducir el tiempo invertido en programar boilerplate para nuestros modelos es que recurrimos a una segunda librería: Keras. Lanzada al público también en 2015 por François Chollet, esta librería puede correr encima de TensorFlow y permite hacer más fácil la experimentación rápida de distintos modelos de redes neuronales profundas, sin necesidad de programar demasiado código boilerplate. Al igual que TensorFlow, presenta una API escrita en Python.
  
  \subsection{Librerías principales de programación lineal entera: PuLP}
  
  Para desarrollar el algoritmo de optimización utilizando programación lineal entera se utilizara una librería de Python open source llamada \textit{PuLP} \cite{PULP}. PuLP es utilizada en diversos tipos de resoluciones de problemas de optimización y provee varios solucionadores de programación lineal como CBC, GLPK y Gurobi. Provee también distintos comandos para manipular y mostrar el resultado obtenido de la optimización.
  
  \subsection{Herramientas}
  
  \begin{table}[htbp]
  	\begin{center}
  		\begin{tabular}{|l|l|}
  			\hline
  			\textbf{Categoría}				 					& 		\textbf{Herramientas} \\
  			\hline
  			Lenguaje de Programación					&		 Python\\
  																		   &		Node.js\\
  																		   &		JavaScript\\
   			\hline
   			Bases de Datos		  			 				   &		 PostgreSQL\\
   																		  &		 	DynamoDB\\
  			\hline
  			Entorno de Desarrollo			 				 &		  Jupyter Notebook\\
  																		   &		Visual Studio Code\\
  																		   &		AWS Cloud9\\
  			\hline
  			Control de Versiones							  & 	   Git\\
  			\hline
  			Administración y Control del Proyecto	& 		 Google Docs\\
  																			&		Trello\\
  			\hline
  			Elaboración de Documentos				   & 		LaTex \\
  			\hline
  			Librerías Principales								& 		 TensorFlow\\
  																		   & 		 Keras\\
  																		   & 		 NumPy\\
  																		   & 		 Pandas\\
  																		   & 		 PulLP\\
  																		   & 		 ReactJS\\
  																		   & 		 ExpressJS\\
  																		   & 		 Bootstrap\\
  																		   & 		 d3.js\\
  			\hline
  		\end{tabular}
  	\end{center}
  \end{table}

  \newpage
  
  \section{Plan de trabajo}
  
  \subsection{Equipo de trabajo}
  
  \begin{itemize}
  	\item Tutor: XXXX
  	\item Estudiante: Bruno Liberini
  \end{itemize}
  
  \subsection{Metodología}
  
  Para el desarrollo de este trabajo se seguirá una adaptación de la metodología SCRUM \cite{SCRUM}. Se definirán iteraciones cuyas fechas se determinarán luego de las reuniones con el tutor, y al final de las cuales se hará entrega de un \textit{feature} del proyecto. \\
  
  Al iniciar cada iteración, se priorizarán los requerimientos con el tutor, se establecerán fechas parciales de entrega si así fuera necesario y finalmente se realizará una reunión al final de la iteración a fin de presentar el entregable desarrollado en ella (\textit{demo}). 
  
  \subsection{Estimaciones}
  
  Se realizó la estimación de las tareas en conjunto con el tutor. Todas las estimaciones están expresadas en horas reloj.
  
  \begin{longtable}{| c | l | c |}
  	\hline
  	\textbf{Iteración}	& 	\textbf{Descripción}												& 	\textbf{Estimación (h)} \\
  	\hline \hline
  	\endfirsthead
  	
  	\hline
  	\textbf{Iteración}	& 	\textbf{Descripción}												& 	\textbf{Estimación (h)} \\
  	\hline \hline
  	\endhead
  	
  	\endfoot
  	
  	\endlastfoot
  	
  	-					&	Propuesta de Trabajo Profesional 												   &	45\\
  	\hline
	  					&	Configuración del Entorno de Trabajo 											 &	 10\\
	  1				    &	Exploración de fuentes de datos 													&	12\\
					    &	Diseño de módulo de recolección de datos									 &	 12\\
					    &	Recolección y normalización de datos											 &	 30\\
  	\hline
  	 					&	Investigación y análisis de modelos de \textit{machine learning} benchmark																							  &	  18\\
  	2				   &   Diseño de modelos de \textit{machine learning} benchmark			  &	  9\\
					  	&	Implementación de modelos de \textit{machine learning}  benchmark																							  &	   9\\
					  	&	Obtención de métricas, corroboración y correcciones de  			 & 	  6\\
					  	& 	modelos de \textit{machine learning} benchmark							  &	     \\
  	\hline
  						&	Investigación y análisis de modelos de redes neuronales recurrentes																								&	30\\
  	3				   &   Diseño de modelos de redes neuronales recurrentes					  &	  12\\
					  	&	Implementación de modelos de redes neuronales recurrentes		 &	 18\\
					  	&	Obtención de métricas, corroboración y correcciones de 				  &    6\\
					  	& 	modelos de redes neuronales recurrentes										   &	  \\
  	\hline
  	4				   &   Comparación entre modelos y elección de modelo						   &	6\\
  						&	Experimentación con estadísticas avanzadas 							  		 &    18\\
  	\hline
  						&	Investigación y análisis de algoritmos de optimización PLE				& 	30\\
  	5				   &   Desarrollo de algoritmo de optimización PLE 									  &	  12\\
					  	&	Obtención de métricas, corroboración y correcciones del  			  &   6\\
					  	& 	algoritmo obtenido																			   &   \\
  	\hline
  						&	Investigación y análisis de algoritmos de optimización greedy		  & 	30\\
  	6				   &   Desarrollo de algoritmo de optimización greedy 							    &	  12\\
					  	&	Obtención de métricas, corroboración y correcciones del  			  & 	 6\\
					  	& 	algoritmo obtenido																			   &   \\
  	\hline
  						&	Desarrollo de servidor web para API		  											& 	18\\
  	7				   &   Despliegue de servidor web para API en la nube							  &	  6\\
  						&	Pruebas de carga sobre servicios en la nube	  								  &   12\\
	\hline
  						&	Diseño de sitio web de consulta		  											 	  &   6\\
  	8				   &   Construcción de sitio web de consulta			 							    &	18\\
  						&	Pruebas de usabilidad	  								  								    &   12\\
  	\hline
  	-					&	Reuniones																						  &	16\\
  	\hline
  	-					&	Informe y Presentación																	  &	20\\
  	\hline
  \end{longtable}

  Además, se debe tener en cuenta el tiempo dedicado a la administración del proyecto, que se estima en 10\% del tiempo total de desarrollo e investigación.
  
   
  \begin{table}[H]
  	\centering
  	\begin{tabular}{|l|c|}
  		\hline
  		\textbf{Descripción} 	& \textbf{Esfuerzo (h)}\\
  		\hline
  		Iteración 1 			& 64\\
  		\hline
  		Iteración 2 			& 42\\
  		\hline
  		Iteración 3 			& 66\\
  		\hline
  		Iteración 4 			& 24\\
  		\hline
  		Iteración 5 			& 48\\
  		\hline
  		Iteración 6 			& 48\\
  		\hline
  		Iteración 7 			& 36\\
  		\hline
  		Iteración 8 			& 36\\
  		\hline
  		\hline
  		Otros 					& 81\\
  		\hline
  		Administración 			& 44\\
  		\hline
  		\hline
  		\textbf{Esfuezo Total} 	& 489 \\
  		\hline
  	\end{tabular}
  \end{table}
  
  \subsection{Cronograma de entregables}
  
  A continuación se hace un cronograma tentativo de entregables al finalizar cada una de las iteraciones. Estos pueden ser modificados en caso de verse necesario por el tutor o el desarrollador del proyecto. Las fechas de cada una de las entregas serán coordinadas en conjunto con el tutor.
  
  \begin{table}[htbp]
  	\begin{center}
  		\begin{tabular}{|c|l|}
  			\hline
  			\textbf{Iteración}	 	& \textbf{Entregables}\\
  			\hline
  			1 								 & $\bullet$ Módulo de recolección de datos\\
  											 & $\bullet$ Set de datos de ejemplo \\
  			\hline
  			2 								 & $\bullet$ Implementación de modelos básicos de \textit{machine learning}\\
  											 & $\bullet$ Informe con métricas de modelos benchmark\\
		    \hline
		    3 								 & $\bullet$ Implementación de modelos de redes de \textit{deep learning}\\
		    								  & $\bullet$ Informe con métricas de modelos de redes de \textit{deep learning}\\
            \hline
            4 								 & $\bullet$ Informe con la elección del o los modelos a utilizar y su performance con nuevos datos\\
		    \hline
		    5 								 & $\bullet$ Implementación de algoritmo de optimización PLE\\
											  & $\bullet$ Informe con resultados obtenidos con algoritmo\\		    
		    \hline
		    6 								 & $\bullet$ Implementación de algoritmo de optimización greedy\\
											  & $\bullet$ Informe con resultados obtenidos con algoritmo\\	
		    \hline
			7 								 & $\bullet$ Implementación de API en la nube\\
		    								  & $\bullet$ Informe sobre resultado de pruebas de carga\\
		    \hline
		    8 								 & $\bullet$ Implementación de sitio web de consulta\\
		    \hline
		    - 								  & $\bullet$ Informe final y conclusiones del Trabajo Profesional \\
		    \hline
  		\end{tabular}
  	\end{center}
  \end{table}  	
  
  \newpage
  \section{Referencias y material consultado}
  
  \renewcommand\refname{\small}
  
  \begin{thebibliography}{X}
  	
  \bibitem{MONEYBALL} Lewis, M. (2003). \textit{Moneyball: the art of winning an unfair game}. New York: W.W. Norton.
  
  \bibitem{FEATURE_ENG_DOM} Domingos, P. (2012). \textit{A few useful things to know about machine learning}. Communications of the ACM, 55(10), 78-87. Recuperado el 1º de Septiembre de 2019 de: \url{https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf}.
  
  \bibitem{LUTZ} Lutz, R. (2015). \textit{Fantasy football prediction}. arXiv preprint arXiv:1505.06918. Recuperado el 1º de Septiembre de 2019 de:	\url{https://arxiv.org/pdf/1505.06918.pdf}.
  
  \bibitem{ML_DFS} Dolan, P., Karaouni, H., \& Powell, A. (2015). \textit{Machine Learning for Daily Fantasy Football Quarterback Selection}. Stanford. Recuperado el 1º de Septiembre de 2019 de: \url{http://cs229.stanford.edu/proj2015/111_report.pdf}.
  
  \bibitem{BAYESIAN} Sugar, G., \& Swenson, T. (2015). \textit{Predicting Optimal Game Day Fantasy Football Teams}. Recuperado el 1º de Septiembre de 2019 de: \url{https://www.nisivoccia.com/wp-content/uploads/2016/10/115_report.pdf}.
  
  \bibitem{RANDOM_FOR} Steenkiste, P. (2015). \textit{Finding the Optimal Fantasy Football Team}. Stanford. Recuperado el 1º de Septiembre de 2019 de: \url{http://cs229.stanford.edu/proj2015/105_report.pdf}.
  
  \bibitem{MULTIPLE} Tanemura, K., McKinney, R., Dorn, E., \& Li, M. (2007). \textit{Gridiron-Gurus Final Report} (disertación). California Polytechnic State University. Recuperado el 1º de Septiembre de 2019 de: \url{https://digitalcommons.calpoly.edu/cgi/viewcontent.cgi?article=1138&context=cscsp}.
  
  \bibitem{DEEP_LEARNING} Deng, L., \& Yu, D. (2014). \textit{Deep learning: methods and applications}. Foundations and Trends® in Signal Processing, 7(3–4), 197-387. Recuperado el 1º de Septiembre de 2019 de: \url{https://www.microsoft.com/en-us/research/publication/deep-learning-methods-and-applications/?from=http%3A%2F%2Fresearch.microsoft.com%2Fpubs%2F209355%2Fdeeplearning-nowpublishing-vol7-sig-039.pdf}.
  	
  \bibitem{RNN_BASEBALL} Oler, K. \textit{Using Recurrent Neural Networks to Predict Player Performance}. Trabajo presentado en el cuarto seminario anual \textit{Saberseminar}, 2017, en Boston, MA, EE.UU. Recuperado el 1º de Septiembre de 2019 de:  \url{https://tht.fangraphs.com/using-recurrent-neural-networks-to-predict-player-performance/}.
  
  \bibitem{MARKOWITZ} Markowitz, H. (1952). \textit{Portfolio selection}. The journal of finance, 7(1), 77-91.
  
  \bibitem{PLE_FF} Sugar, G., \& Swenson, T. (2015). \textit{Predicting Optimal Game Day Fantasy Football Teams}. Recuperado el 1º de Septiembre de 2019 de: \url{https://www.nisivoccia.com/wp-content/uploads/2016/10/115_report.pdf}
  
  \bibitem{GREEDY_FF} Hunter, D. S., Vielma, J. P., \& Zaman, T. \textit{Winning at Daily Fantasy Sports Using Analytics}. Trabajo presentado en la Sloan Sports Analytics Conference, 2016. Recuperado el 1º de Septiembre de 2019 de: \url{http://www.sloansportsconference.com/content/winning-at-daily-fantasysports-using-analytics/}.
  
  \bibitem{PROB_PLE_DFS} Hunter, D. S., Vielma, J. P., \& Zaman, T. (2016). \textit{Picking winners using integer programming}. arXiv preprint arXiv:1604.01455. Recuperado el 1º de Septiembre de 2019 de: \url{https://arxiv.org/pdf/1604.01455.pdf}
  
  \bibitem{NIELSEN} Nielsen, J. (1994, Abril). \textit{Enhancing the explanatory power of usability heuristics}. Actas de la Conference on Human Factors in Computing Systems de la SIGCHI (pp. 152-158). ACM. Recuperado el 1º de Septiembre de 2019 de: \url{https://pdfs.semanticscholar.org/5f03/b251093aee730ab9772db2e1a8a7eb8522cb.pdf}
  
  \bibitem{PULP} Mitchell, S., Kean, A., Mason, A., O’Sullivan, M., \& Phillips, A. (2007). \textit{Optimization with PuLP}. Recuperada el 1º de Septiembre de 2019 de: \url{https://pythonhosted.org/PuLP/}.
  
  \bibitem{SCRUM} \textit{SCRUM}. \textit{Metodología de desarrollo de software, con ciclo de vida iterativo}. Recuperado el 1º de Septiembre de 2019 de: \url{http://scrummethodology.com/}.
  
  \end{thebibliography}
  
  
\end{document}